<?php

require_once __DIR__ . '/abstract/AbstractAlunoDAO.php';
require_once __DIR__ . '/../bean/AlunoReg.php';
require_once __DIR__ . '/../util/DataUtil.php';

/**
 * DAO de abstração para objetos AlunoReg.
 *
 * @author hyzandey
 */
class AlunoRegDAO extends AbstractAlunoDAO {
    
    const QUERY = "select * from aluno_regular
        where 1 = 1 ";
    
    const LETRA_TURMA_COLUNA = 'letra_turma';
    const NOME_TURMA_C0LUNA = 'nome_turma';
    const DT_MOV_COLUNA = 'data_mov_aluno';
    const ST_MOV_COLUNA = 'status_mov';
    const MOD_ENSINO_COLUNA = 'mod_ensino';
    const SERIE_COLUNA = 'serie';
    const ANO_SEM_COLUNA = 'ano_sem';

    protected $filter;

    public function __construct($filter) {
        parent::__construct($filter);
    }

    protected function preencheAluno(&$aluno, $linha) {

        parent::preencheAluno($aluno, $linha);

        if ($linha) {
            $aluno->setCodLetraTurma(DataUtil::getValor($linha[self::LETRA_TURMA_COLUNA]));
            $aluno->setDataMovimentacao(DataUtil::getValor($linha[self::DT_MOV_COLUNA]));
            $aluno->setNomeCurso(DataUtil::getValor($linha[self::MOD_ENSINO_COLUNA]));
            $aluno->setSerie(DataUtil::getValor($linha[self::SERIE_COLUNA]));
            $aluno->setStatusMovimentacao(DataUtil::getValor($linha[self::ST_MOV_COLUNA]));
            $aluno->setNomeTurma(DataUtil::getValor($linha[self::NOME_TURMA_C0LUNA]));
        }
    }

    protected function getQueryPrincipal() {
        return self::QUERY;
    }

    protected function parametrizaQuery() {
        
        parent::parametrizaQuery();

        $this->insertWhere($modEnsino = $this->ajustaStringFiltro(
                $this->filter->getModalidadeEnsino())
                , "and mod_ensino ilike '$modEnsino'");

        $this->insertWhere($serie = $this->ajustaStringFiltro(
                $this->filter->getSerie())
                , "and serie ilike '$serie'");
        
        $statusMovList = $this->filter->getStatusMovList();
        $statusMovString = DataUtil::getValuesAsString($statusMovList, true);
        
        $this->insertWhere(true
        		, "and status_mov in($statusMovString)");
    }

    protected function constroiAluno() {
        return new AlunoReg();
    }

    protected function getColunaAnoSem() {
        return self::ANO_SEM_COLUNA;
    }

}

?>
